
const jwt=require('jsonwebtoken');
const {TOKEN_KEY}=require('../config');//token密钥
const {parse}=require('url');

const {
    WHITE_LIST
}=require('../config');

module.exports = options=>{
     return async function(ctx,next){
        //  console.log(ctx.request.url)
        const {pathname}=parse(ctx.request.url);//解析请求路径
        //判断pathname 是否在白名单中
        // console.log(pathname);
        const flag=WHITE_LIST.includes(pathname);
        // console.log(flag);
        if(!flag){//不在白名单中,获取token，检测token是否失效
            const token=ctx.request.headers['authorization'];
            if(!token){
                ctx.status=401;
                ctx.body={
                    code:1002,
                    msg:'token不存在'
                }
            }else{
                //获取失效时间
                const {exp}=jwt.verify(token,TOKEN_KEY);
                if(+new Date()>exp){//当前时间大于失效时间
                    ctx.status=401;
                    ctx.body={
                        code:1002,
                        msg:"token已失效"
                    }
                }else{//未失效
                   await next();
                }
            }
        }else{//在白名单中
            await next();//无需校验，向下执行，不执行，会拦截响应
        }
       
     }
}